package cn.sangedon.review.analysis.service;

import cn.sangedon.review.analysis.domain.StrategyResultQuery;
import cn.sangedon.review.common.domain.analysis.StockStrategy;
import cn.sangedon.review.common.domain.analysis.StockStrategyResult;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;

/**
 * @author dongliangqiong
 * @description 针对表【tb_stock_strategy_result】的数据库操作Service
 * @createDate 2022-08-26 18:00:56
 */
public interface StockStrategyResultService extends IService<StockStrategyResult> {
    /**
     * 获取五日成交量缩小一半策略的选股结果
     *
     * @param stockStrategy
     * @return
     */
    List<StockStrategyResult> getFiveHalfVolResult(StockStrategy stockStrategy);

    /**
     * 获取十日成交量缩小70%策略的选股结果
     *
     * @param stockStrategy
     * @return
     */
    List<StockStrategyResult> getTenAverageVolResult(StockStrategy stockStrategy);

    /**
     * 总结昨日策略结果的今日涨跌幅
     */
    void verify();

    /**
     * 获取策略执行结果
     *
     * @param strategyResultQuery
     * @return
     */
    List<StockStrategyResult> getStrategyResult(StrategyResultQuery strategyResultQuery);

    /**
     * 获取最新交易策略结果
     *
     * @return
     */
    List<StockStrategyResult> getLatestResult();

    /**
     * 获取最新需要验证第二天行情结果的策略结果数量
     *
     * @return
     */
    Long countNeedVerifyResult();

    /**
     * 验证最近策略结果第二天行情信息
     */
    void stockStrategyResultService();

    /**
     * 获取最近下跌缩量红策略结果
     *
     * @param tradeDate
     * @return
     */
    List<StockStrategyResult> listFallShrinkResult(String tradeDate);

    /**
     * 验证历史策略结果第二天行情信息
     */
    void verifyHistoryStrategyResult(String tradeDate);

    /**
     * 运算某个交易日符合下跌缩量红策略结果
     *
     * @param tradeDate 交易日
     */
    void executeFallShrinkRedResult(String tradeDate);

    /**
     * 运算某个交易日符合上涨缩量红策略结果
     *
     * @param tradeDate 交易日
     */
    void executeRiseShrinkRedResult(String tradeDate);

    /**
     * 验证某个策略结果第二天行情信息
     */
    void verifyStrategyResult(Long strategyId, String tradeDate);

    Map<String, Object> verifyStrategy();
}
